home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 October
/
EnigmA AMIGA RUN 22 (1997)(G.R. Edizioni)(IT)[!][issue 1997-10 & 11][EAR-CD VI].iso
/
progs
/
devel
/
pcq12d_2
/
examples
/
easyiff.p
< prev
next >
Wrap
Text File
|
1992-02-17
|
3KB
|
150 lines
Program EasyIFF;
{
EasyExample - A simple ILBM file viewer by Christian A. Weber
This program is in the public domain, use at your own risk.
Requires the iff.library in the LIBS: dircetory.
This Pascal program is Weber's C program EasyExample.c re-written
in PCQ Pascal.
}
{$I "Include:Graphics/GFXBase.i"}
{$I "Include:Intuition/Intuition.i"}
{$I "Include:Libraries/IFF.i"}
{$I "Include:Exec/Libraries.i"}
{$I "Include:Graphics/View.i"}
{$I "Include:Libraries/DOS.i"}
{$I "Include:Utils/StringLib.i"}
{$I "Include:Utils/Parameters.i"}
Const
GfxBase : GfxBasePtr = Nil;
IFile : IFFFILE = Nil;
MyScreen : ScreenPtr = Nil;
Const
NS : NewScreen = (0,0,0,0,0,0,0,0, CUSTOMSCREEN_f or SCREENQUIET_f,
Nil, "Simple ILBM viewer by Christian A. Weber",
Nil,Nil);
Procedure SetOverscan(Screen : ScreenPtr);
{ Adjust the screen position for overscan }
var
cols,rows : Short;
x,y : Short;
vp : ViewPortPtr;
begin
x := Screen^.Width;
y := Screen^.Height;
vp := @Screen^.SViewPort;
cols := GfxBase^.NormalDisplayColumns div 2;
rows := GfxBase^.NormalDisplayRows;
if rows > 300 then
rows := rows div 2;
x := x - cols;
if (vp^.Modes and HIRES) <> 0 then
x := x - cols;
y := y - rows;
if (vp^.Modes and LACE) <> 0 then
y := y - rows;
x := x div 2;
if x < 0 then
x := 0;
y := y div 2;
if y < 0 then
y := 0;
if y > 32 then
y := 32;
{ Correct overscan HAM color distortions }
if (vp^.Modes and HAM) <> 0 then begin
if ViewPtr(GfxBase^.ActiView)^.DxOffset-x < 96 then
x := View(GfxBase^.ActiView^).DxOffset-96;
end;
vp^.DxOffset := -x;
vp^.DyOffset := -y;
MakeScreen(Screen);
RethinkDisplay();
end;
Procedure Fail(Error : String); { Print error message, free resources and exit }
begin
Writeln(Error, ', IFFError = ', IFFError);
if IFile <> Nil then
CloseIFF(IFile);
if MyScreen <> Nil then
CloseScreen(MyScreen);
if IFFBase <> Nil then
CloseLibrary(IFFBase); { MUST ALWAYS BE CLOSED !! }
CloseLibrary(LibraryPtr(GfxBase));
Exit(0);
end;
var
Count,i : Short;
BMHD : BitMapHeaderPtr;
ColorTable : Array [0..127] of Short;
FileName : String;
begin
FileName := AllocString(256);
GetParam(1,FileName);
if (strlen(FileName) = 0) or streq(FileName,"?") then begin
Writeln("Format: EasyIFF filename");
exit(10);
end;
GfxBase := GfxBasePtr(OpenLibrary("graphics.library",0));
IFFBase := OpenLibrary(IFFNAME, IFFVERSION);
if IFFBase = Nil then begin
Writeln('Copy the iff.library to your LIBS: directory!');
Exit(10);
end;
Write('Loading file ', FileName, ' ...');
IFile := OpenIFF(FileName);
if IFile = Nil then
Fail("Error opening file");
BMHD := GetBMHD(IFile);
if BMHD = Nil then
Fail("BitMapHeader not found");
with NS do begin
Width := BMHD^.w;
Height := BMHD^.h;
Depth := BMHD^.nPlanes;
ViewModes := GetViewModes(IFile);
end;
MyScreen := OpenScreen(@NS);
if MyScreen = Nil then
Fail("Can't open screen!");
SetOverscan(MyScreen);
Count := GetColorTab(IFile, @ColorTable);
if count > 32 then
count := 32; { Some HAM pictures have 64 colors ?! }
LoadRGB4(@MyScreen^.SViewPort,@ColorTable,Count);
if not DecodePic(IFile,@MyScreen^.SBitMap) then
Fail("Can't decode picture");
Delay(200);
Fail("done"); { Normal termination }
end.